仔細講一下 Data_Previous1 <= Data1;

我們來寫個範例
設計上來講就是一個
輸出 Out1<=Date;

module Clk_Add1(reset1,Date,clk,Out1);
input reset1 ,clk;
input [7:0] Date;
output[7:0] Out1;
reg[7:0] Out1;
always@(negedge reset1 or posedge clk)
begin
if( ~reset1) begin
    Out1<=0;
end
else begin
    Out1<=Date;
end
end
endmodule 
tb
一開始 reset 開啟之後,每到一個
posedge clk 就是 clk 到 High
設定上:
always #10 Date<=~Date;
always #5 clk<=~clk;
module tb1();
reg reset1 ,clk ;
reg  Date;
wire Out1;
Clk_Add1 Clk_test(.reset1(reset1), .Date(Date) ,.clk(clk),.Out1(Out1));
initial begin
        clk<=0;reset1<=0;Date<=0;
    #7 reset1<=1;
    #6000 $stop;
end
always #10 Date<=~Date;
always #5 clk<=~clk;
endmodule

有注意到嗎? 我們是設定的是 Clk跟 DATA是對到的
所以 Clk 下緣 → Data 輸出

然後我們的觸發是 Clk的上緣,那我們拿到的 Data 就是上一筆的中間

所以在這個案例中posedge clk 配合 Out1<=Date; 就是上一筆的中間
我們假設 設定成 negedge clk 配合 Out1<=Date;
module Clk_Add1(reset1,Date,clk,Out1);
input reset1 ,clk;
input  Date;
output Out1;
reg Out1;
always@(negedge reset1 or negedge clk) 
begin 
if( ~reset1) begin
    Out1<=0;
end
else begin
    Out1<=Date;
end
end
endmodule 
tb
module tb1();
reg reset1 ,clk ;
reg  Date;
wire Out1;
Clk_Add1 Clk_test(.reset1(reset1), .Date(Date) ,.clk(clk),.Out1(Out1));
initial begin
        clk<=0;reset1<=0;Date<=0;
    #7 reset1<=1;
    #6000 $stop;
end
always #10 Date<=~Date;
always #5 clk<=~clk;
endmodule
結果如下

觸發在 clk下緣,那 Data 剛好發射,那就是同步了
